14 - Theorie der Programmierung [ID:9218]
50 von 512 angezeigt

Ja, herzlich willkommen. Wir haben im Lambda-Kalkül eigentlich noch ein Thema über, das ist die

starke Normalisierung des einfach getypten Lambda-Kalküls. Dieser starke Normalisierungsbeweis,

den werden Sie im Skript finden in zwei Versionen. Also einmal in der Version für den einfach getypten

Lambda-Kalkül und einmal für eine viel stärkere Sprache für das sogenannte System F. Das kommt

also jetzt ein Kapitel nach dem nächsten. Das kann man auch zwei Arten aufziehen. Man kann also

entweder erst diesen spezielleren Beweis für das schwächere System machen und ihn dann aufbohren

und für das stärkere System nochmal präsentieren oder man kann, was ein bisschen Zeit spart, ihn

jetzt weglassen und später einfach den gesamten Beweis für das starke System führen, aus dem dann

ohne Weiteres die Aussage für den einfach getübten Lambda-Kalkül folgt. Ich habe mich mit Herrn Rauch

kurz geschlossen und Herr Rauch sagt, so wir haben nur noch so und so viele Termine, machen wir lieber

schneller. So, also das heißt wir lassen das mit der starken Normalisierung des einfach getübten

Lambda-Kalküls jetzt vorläufig weg, das wird also später folgen aus der starken Normalisierung

von System F und gehen direkt zum Thema

Induktiver Datentyp. Ja, da die meisten hier ja eine funktionale Programmiersprache beherrschen,

wissen die meisten auch, was ein Induktiver Datentyp ist. Ja, ich schreibe mal, Scherz ist halber,

aber einen in, naja so halbwegs Haskell-Syntax, man vergebe mir den einen oder anderen Syntax-Fehler

hin. Ja, in Haskell führ ich ja so einen Datentyp ein mit dem Schlüsselwort data. So, ja in Haskell

würde jetzt ein gleich kommen. Entschuldigung. Und da weichen wir jetzt noch mal bewusst von ab,

also was jetzt kommt ist kein Syntax-Fehler bzw. vielleicht ist es sogar auch legale Haskell-Syntax,

also ich definiere jetzt einen Datentyp natürliche Zahlen. So, und dann mache ich hier mit dem

Schlüsselwort where weiter, das mache ich deswegen, weil ich das dann später in der

Syntax zwanglos verallgemeinern kann auf den dualen Fall der sogenannten Codatentypen,

da haben wir jetzt noch keine Gedanken zu machen, aber das erklärt diese Wahl der Syntax. So, und

hinter diesem where gebe ich einen Stapel Operationen an, mit denen ich den Datentyp,

in diesem Fall soll das also ein Datentyp natürlicher Zahlen werden, wie der Name

andeutet, konstruieren kann, sogenannte Konstruktoren. So, die kann ich auch in

passender Syntax schreiben, also zum Beispiel kann ich den Konstruktor für die Null eben auch

Null nennen. Der kriegt keine Argumente, das heißt, der kriegt hier den Unit-Typ,

den einelementigen Typ als Argumenttyp und liefert dann natürlich eine natürliche Zahl.

Und dann gibt es die Successor Funktion, die schreibe ich mal gemäß Haskell Konvention groß,

die kriegt eine natürliche Zahl als Eingabe und liefert eben auch eine solche zurück. Ja,

in Kurzschreibweise wäre das das hier nicht data not gleich und dann kommt die erste Alternative

ist Null und die zweite ist so knapp, das wäre so die kürzere Syntax dafür, die man in Haskell

wohl normalerweise wählen würde. Wer hat sowas noch nie gesehen?

Zwei. So,

Ja, Gegenstand des nächsten Kapitels ist also die systematische theoretische Behandlung solcher

Datentypen und insbesondere ihrer Semantik, aber auch der Frage, wie ich denn Dinge über

solche Datentypen und Funktionen, die ich darauf definiere, beweise. Ja, fangen wir an mit der

Semantik. Es ist gegeben das, was wir an technischen Methoden schon haben, relativ

straight forward. Was passiert dann? Ich habe es extra jetzt eben in dieser abweichenden

Sonntags relativ explizit gemacht. Was da passiert ist, wir deklarieren schlicht und einfach eine

Signatur. Sie steht mehr oder weniger explizit da. Wir wären als Bezeichner für diese Signatur

einfach mal ein Sigma mit dem Index des Datentyp namens. Das ist also in diesem Falle Sigma nat.

So und was kommt da in diesem Falle raus? Gut, ist klar, das ist eine nullstellige Operation 0 und

eine einstellige Operation SUG erinnert alles fürchterlich an Dinge, die wir schon mal gesehen

haben. Und wie gesagt, diese Dinger hier heißen die Konstruktoren des Datentyps.

Ja, und so ein Datentyp, der hat eben auch eine Semantik und da gehen wir zunächst mal

sehr einfach ran. Wie immer schreiben wir die Semantik mit solchen doppelten eckigen

Klammern. Und die Semantik eines Datentyps ist also zunächst mal ändert sich noch schlicht und

einfach eine Menge und zwar eine Menge von Termen über der Signatur, die der Datentyp deklariert,

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

01:20:51 Min

Aufnahmedatum

2018-06-04

Hochgeladen am

2018-06-04 16:49:07

Sprache

de-DE

Tags

Isomorphismus Homomorphismus Induktive Datentypen
Einbetten
Wordpress FAU Plugin
iFrame
Teilen